Visayas State University: Campus Safety and Resilience Survey

Author

ViSERDAC

Published

January 16, 2026

1 Faculty and staff

1.1 Sociodemographic

Code
data_raw |> 
  select(position, age:resident, participation, traffic_light) |> 
  select(-work_year) |> 
  mutate(
    resident = if_else(resident == 1, "In-campus", "Off-campus"),
    participation = case_when(
      participation %in% c(0, "0", "No") ~ "No",
      participation %in% c(1, "1", "Yes") ~ "Yes",
      TRUE ~ as.character(participation)),
    traffic_light = case_when(
      traffic_light == 0 ~ "No",
      traffic_light == 1 ~ "Yes",
      traffic_light == 2 ~ "Maybe",
      TRUE ~ as.character(traffic_light))
      ) |> 
  tbl_summary(
    by = position,
    type = list(sex ~ "categorical",
                participation = "categorical"),
    missing_text = "Missing observation(s)"
  ) |> 
  bold_labels() %>% 
  as_kable_extra(linesep = "") %>% 
  kable_minimal() %>% 
  kable_styling(full_width = F, fixed_thead = T,
                bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Characteristic faculty
N = 20
staff
N = 20
age 32 (24, 37) 31 (29, 38)
Missing observation(s) 2 0
sex
0 8 (44%) 8 (42%)
1 10 (56%) 11 (58%)
Missing observation(s) 2 1
resident
In-campus 7 (39%) 3 (16%)
Off-campus 11 (61%) 16 (84%)
Missing observation(s) 2 1
participation
No 15 (75%) 9 (60%)
Yes 5 (25%) 6 (40%)
Missing observation(s) 0 5
traffic_light
Maybe 1 (5.6%) 5 (28%)
No 12 (67%) 1 (5.6%)
Yes 5 (28%) 12 (67%)
Missing observation(s) 2 2
1 Median (Q1, Q3); n (%)

1.2 Physical safety and security

Code
## plotting statement
pss_plt <- 
  item_statement_dta |> 
  filter(str_detect(categories, "Physical")) |>
  ggplot(aes(x = perc, y = description, fill = response_fct)) +
  geom_col(position = "fill", width = 0.7) +
  geom_text(aes(label = scales::percent(perc, accuracy = 1)),
            position = position_fill(vjust = 0.5),
            color = "gray90",
            size = 4, 
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent_format()) +
  scale_fill_manual(values = c("#073b4c", "#118ab2", "#06d6a0", "#ffd166", "#e63946")) +  
  coord_cartesian(clip = "off", expand = TRUE) +
  facet_wrap(~position) +
  labs(title = "Physical safety and security",
       x = element_blank(),
       y = element_blank(),
       fill = "Response") +
  custom_theme
  
## saving plot
ggsave(
  plot = pss_plt,
  filename = "plot/physical_saftey.jpeg",
  dpi = 400,
  height = 6,
  width = 10,
  unit = "in"
)

## show plot
knitr::include_graphics("plot/physical_saftey.jpeg")

1.3 Emotional and professional safety

Code
## plotting statement
eps_plt <- 
  item_statement_dta |> 
  filter(str_detect(categories, "Emotional")) |>
  ggplot(aes(x = perc, y = description, fill = response_fct)) +
  geom_col(position = "fill", width = 0.7) +
  geom_text(aes(label = scales::percent(perc, accuracy = 1)),
            position = position_fill(vjust = 0.5),
            color = "gray90",
            size = 4, 
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent_format()) +
  scale_fill_manual(values = c("#073b4c", "#118ab2", "#06d6a0", "#ffd166", "#e63946")) +
  coord_cartesian(clip = "off", expand = TRUE) +
  facet_wrap(~position) +
  labs(title = "Emotional and professional safety",
       x = element_blank(),
       y = element_blank(),
       fill = "Response") +
  custom_theme


## saving plot
ggsave(
  plot = eps_plt,
  filename = "plot/emotional_saftey.jpeg",
  dpi = 400,
  height = 6,
  width = 10,
  unit = "in"
)

## show plot
knitr::include_graphics("plot/emotional_saftey.jpeg")

1.4 Social and community safety

Code
## plotting statement
scf_plt <- 
  item_statement_dta |> 
  filter(str_detect(categories, "Social")) |>
  ggplot(aes(x = perc, y = description, fill = response_fct)) +
  geom_col(position = "fill", width = 0.7) +
  geom_text(aes(label = scales::percent(perc, accuracy = 1)),
            position = position_fill(vjust = 0.5),
            color = "gray90",
            size = 4, 
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent_format()) +
  scale_fill_manual(values = c("#073b4c", "#118ab2", "#06d6a0", "#ffd166", "#e63946")) +
  coord_cartesian(clip = "off", expand = TRUE) +
  facet_wrap(~position) +
  labs(title = "Social and community safety",
       x = element_blank(),
       y = element_blank(),
       fill = "Response") +
  custom_theme


## saving plot
ggsave(
  plot = scf_plt,
  filename = "plot/social_saftey.jpeg",
  dpi = 400,
  height = 6,
  width = 10,
  unit = "in"
)

## show plot
knitr::include_graphics("plot/social_saftey.jpeg")

2 Student

2.1 Sociodemographic profile

Code
student_raw_dta |> 
  select(age:location) |>
  mutate(
    location = if_else(location == 1, "In-campus", "Off-campus"),
    sex = if_else(sex == 0, "Male", 'Female')
      ) |> 
  tbl_summary(
    type = list(sex ~ "categorical", age ~ "continuous"),
    missing_text = "Missing observation(s)"
  ) |> 
  bold_labels() %>% 
  as_kable_extra(linesep = "") %>% 
  kable_minimal() %>% 
  kable_styling(full_width = F, fixed_thead = T,
                bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Characteristic N = 25
age 18.00 (18.00, 19.00)
sex
Female 16 (64%)
Male 9 (36%)
year
BCAED-3 3 (12%)
BSA- 3 1 (4.0%)
BSA-2 1 (4.0%)
BSABE-2 1 (4.0%)
BSBIO-1 3 (12%)
BSBT-1 5 (20%)
BSCS-2 1 (4.0%)
BSDC-2 2 (8.0%)
BSED MATH 1 (4.0%)
BSMET-1 3 (12%)
BSS-1 1 (4.0%)
BSTM-2 3 (12%)
location
In-campus 3 (13%)
Off-campus 20 (87%)
Missing observation(s) 2
1 Median (Q1, Q3); n (%)

2.1.1 Travel safety

Code
safe_travel_plt <- 
  tibble(
  safe_travel = c("Very unsafe", "Unsafe", "Safe", 'Very safe'),
  n_count = c(0, 0, 23, 1)
) |> 
  mutate(fct_safe_travel = factor(safe_travel, levels = c("Very unsafe", "Unsafe", "Safe", 'Very safe'))) |> 
  mutate(n_percent = n_count / sum(n_count)) |> 
  ggplot(aes(y = fct_safe_travel, x = n_percent)) +
  geom_col(width = 0.7, fill = "#073b4c") +
  geom_text(aes(label = scales::percent(n_percent, accuracy = 1)), 
            hjust = 0,
            color = "gray20",
            size = 5, 
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent_format()) +
  labs(y = element_blank(),
       x = element_blank(),
       title = "How safe do you feel traveling to and from VSU campus?") +
  custom_theme

## saving plot
ggsave(
  plot = safe_travel_plt,
  filename = "plot/safe_travel.jpeg",
  dpi = 400,
  height = 5,
  width = 10,
  unit = "in"
)

## show plot
knitr::include_graphics("plot/safe_travel.jpeg")

2.1.2 Traffic light

Code
st_traffic_light <- 
  student_raw_dta |> 
  select(traffic_light) |> 
  mutate(traffic_light = case_when(traffic_light == 0 ~ 'No',
                                   traffic_light == 1 ~ 'Yes',
                                   traffic_light == 2 ~ 'Maybe'
  )) |> 
  count(traffic_light) |> 
  na.omit() |> 
  mutate(n_percent = n / sum(n)) |> 
  ggplot(aes(y = traffic_light, x = n_percent)) +
  geom_col(width = 0.5, fill = "#073b4c") +
  geom_text(aes(label = scales::percent(n_percent, accuracy = 1)), 
            hjust = 0,
            color = "gray20",
            size = 5, 
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent_format(), limits = c(0, 1)) +
  labs(y = element_blank(),
       x = element_blank(),
       title = "Do you prefer to have traffic lights road in VSU?") +
  custom_theme

## saving plot
ggsave(
  plot = st_traffic_light,
  filename = "plot/student_traffic_light.jpeg",
  dpi = 400,
  height = 5,
  width = 10,
  unit = "in"
)

## show plot
knitr::include_graphics("plot/student_pyhiscal_safety.jpeg")

2.2 Physical safety and security

Code
## plotting statement
st_pss_plt <- 
  student_item_statement_dta |> 
  filter(str_detect(category, "Physical")) |>
  ggplot(aes(x = perc, y = description, fill = response_fct)) +
  geom_col(position = "fill", width = 0.7) +
  geom_text(aes(label = scales::percent(perc, accuracy = 1)),
            position = position_fill(vjust = 0.5),
            color = "gray90",
            size = 4, 
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent_format()) +
  scale_fill_manual(values = c("#073b4c", "#118ab2", "#06d6a0", "#ffd166", "#e63946")) +
  coord_cartesian(clip = "off", expand = TRUE) +
  labs(title = "Physical safety and security",
       x = element_blank(),
       y = element_blank(),
       fill = "Response") +
  custom_theme


## saving plot
ggsave(
  plot = st_pss_plt,
  filename = "plot/student_pyhiscal_safety.jpeg",
  dpi = 400,
  height = 8,
  width = 10,
  unit = "in"
)

## show plot
knitr::include_graphics("plot/student_pyhiscal_safety.jpeg")

2.3 Emotional and psychological safety

Code
## plotting statement
st_eps_plt <- 
  student_item_statement_dta |> 
  filter(str_detect(category, "Emotional")) |>
  ggplot(aes(x = perc, y = description, fill = response_fct)) +
  geom_col(position = "fill", width = 0.7) +
  geom_text(aes(label = scales::percent(perc, accuracy = 1)),
            position = position_fill(vjust = 0.5),
            color = "gray90",
            size = 4, 
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent_format()) +
  scale_fill_manual(values = c("#073b4c", "#118ab2", "#06d6a0", "#ffd166", "#e63946")) +
  coord_cartesian(clip = "off", expand = TRUE) +
  labs(title = "Emotional and psychological safety",
       x = element_blank(),
       y = element_blank(),
       fill = "Response") +
  custom_theme


## saving plot
ggsave(
  plot = st_eps_plt,
  filename = "plot/student_emotional_safety.jpeg",
  dpi = 400,
  height = 8,
  width = 10,
  unit = "in"
)

## show plot
knitr::include_graphics("plot/student_emotional_safety.jpeg")

2.4 Social and community safety

Code
## plotting statement
st_scs_plt <- 
  student_item_statement_dta |> 
  filter(str_detect(category, "Social")) |>
  ggplot(aes(x = perc, y = description, fill = response_fct)) +
  geom_col(position = "fill", width = 0.7) +
  geom_text(aes(label = scales::percent(perc, accuracy = 1)),
            position = position_fill(vjust = 0.5),
            color = "gray90",
            size = 4, 
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent_format()) +
  scale_fill_manual(values = c("#073b4c", "#118ab2", "#06d6a0", "#ffd166", "#e63946")) +
  coord_cartesian(clip = "off", expand = TRUE) +
  labs(title = "Social and community safety",
       x = element_blank(),
       y = element_blank(),
       fill = "Response") +
  custom_theme


## saving plot
ggsave(
  plot = st_scs_plt,
  filename = "plot/student_social_safety.jpeg",
  dpi = 400,
  height = 6,
  width = 10,
  unit = "in"
)

## show plot
knitr::include_graphics("plot/student_social_safety.jpeg")

2.5 Digital safety and emergency preparedness

Code
## plotting statement
st_digi_plt <- 
  student_item_statement_dta |> 
  filter(str_detect(category, "Social")) |>
  ggplot(aes(x = perc, y = description, fill = response_fct)) +
  geom_col(position = "fill", width = 0.7) +
  geom_text(aes(label = scales::percent(perc, accuracy = 1)),
            position = position_fill(vjust = 0.5),
            color = "gray90",
            size = 4, 
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent_format()) +
  scale_fill_manual(values = c("#073b4c", "#118ab2", "#06d6a0", "#ffd166", "#e63946")) +
  coord_cartesian(clip = "off", expand = TRUE) +
  labs(title = "Digital safety and emergency preparedness",
       x = element_blank(),
       y = element_blank(),
       fill = "Response") +
  custom_theme


## saving plot
ggsave(
  plot = st_digi_plt,
  filename = "plot/student_digital_emergency_safety.jpeg",
  dpi = 400,
  height = 6,
  width = 10,
  unit = "in"
)

## show plot
knitr::include_graphics("plot/student_digital_emergency_safety.jpeg")